package Flink.split;

import org.apache.flink.streaming.api.datastream.SingleOutputStreamOperator;
import org.apache.flink.streaming.api.environment.StreamExecutionEnvironment;

public class SplitStreamByFilter {
    // 读取一个整数数字流，将数据流划分为奇数流和偶数流
    public static void main(String[] args) throws Exception {
        StreamExecutionEnvironment env = StreamExecutionEnvironment.getExecutionEnvironment();

        SingleOutputStreamOperator<Integer> ds = env.socketTextStream("master", 7777)
                .map(Integer::valueOf);

        SingleOutputStreamOperator<Integer> filter1Ds = ds.filter(data -> data % 2 == 0);
        SingleOutputStreamOperator<Integer> filter2Ds = ds.filter(data -> data % 2 == 1);

        filter1Ds.print("偶数");
        filter2Ds.print("奇数");

        env.execute();
        /*
        * 这种实现非常简单，但代码显得有些冗余——我们的处理逻辑对拆分出的三条流其实是一样的，
        * 却重复写了三次。而且这段代码背后的含义，是将原始数据流stream复制三份，
        * 然后对每一份分别做筛选；这明显是不够高效的。我们自然想到，能不能不用复制流，直接用一个算子就把它们都拆分开呢？
        * */
    }
}
